package com.xnyzc.lhy.common.exception;

import com.xnyzc.lhy.common.entity.Sb;
import com.xnyzc.lhy.common.penum.EOSSErrorCode;

/**
 * 对象存储OSS异常
 */
public class OSSException extends RuntimeException {
    /**
     * 定义枚举
     */
    private EOSSErrorCode errno;
    /**
     * 问题描述
     */
    private String errmsg;

    /**
     * 构造函数
     *
     * @param errno
     */
    public OSSException(EOSSErrorCode errno) {
        super(errno.toChString());

        this.errno = errno;
        this.errmsg = errno.toChString();
    }

    /**
     * 构造函数
     *
     * @param errno
     * @param errmsg
     */
    public OSSException(EOSSErrorCode errno, String errmsg) {
        super(errmsg);

        this.errno = errno;
        this.errmsg = errmsg;
    }

    public OSSException(Exception e) {
        super(e);

        this.errno = EOSSErrorCode.unKnow;
        this.errmsg = "";
    }

    public OSSException(String errmsg) {
        super(errmsg);

        this.errno = EOSSErrorCode.unKnow;
        this.errmsg = "";
    }

    /**
     * 构造函数
     *
     * @param errno
     * @param errmsg
     */
    public OSSException(EOSSErrorCode errno, String errmsg, Exception e) {
        super(errmsg, e);

        this.errno = errno;
        this.errmsg = errmsg;
    }

    public static OSSException create(EOSSErrorCode errno) {
        return new OSSException(errno);
    }

    public static OSSException create(EOSSErrorCode errno, String errmsg, Object... args) {
        return new OSSException(errno, Sb.format(errmsg, args));
    }

    public static OSSException create(Exception e) {
        return new OSSException(e);
    }

    public static OSSException create(String errmsg) {
        return new OSSException(errmsg);
    }

    /**
     * 打印日志
     *
     * @return
     */
    public String printLog() {
        return new StringBuilder().append("oss exception, type:").append(this.errno.toChString()).append(" errmsg:").append(this.errmsg)
                .toString();
    }
}
